﻿namespace LaserMark.Print.Service
{
    /// <summary>
    ///
    /// </summary>
    public interface IPrint
    {
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> NetWorkInitAsync(bool isLinkByNet, byte[] ip);

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> CreateEntMgrAsync();

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> LoadTemplateAsync(string filePath, out int m_nEntCount, out E3_ID[] m_EntList);

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> DrawImageAsync(IntPtr hdc, int nParam, int bmpwidth, int bmpheight,
            double dLogOriginX, double dLogOriginY, double dLogScale);

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<int> MarkerMarkEnt2Async(E3_ID e3_ID);

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<bool> MarkerDlgSetCfgAsync();

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> StopMarkAsync();

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        Task<string> Dispose();

        /// <summary>
        ///
        /// </summary>
        /// <param name="idEnt"></param>
        /// <param name="dMoveX"></param>
        /// <param name="dMoveY"></param>
        /// <param name="dCenterX"></param>
        /// <param name="dCenterY"></param>
        /// <param name="dRotateAng"></param>
        /// <returns></returns>
        Task<string> MarkerSetRotateMoveParam(double dRotateAng);

        /// <summary>
        ///
        /// </summary>
        /// <param name="idMarker"></param>
        /// <returns></returns>
        Task<bool> MarkerCheckLaserState();

        /// <summary>
        /// 
        /// </summary>
        /// <param name="isopen"></param>
        /// <returns></returns>
        Task<bool> MarkerLaserOn(bool isopen);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="isopen"></param>
        /// <returns></returns>
        Task<bool> MarkerLaserOff(bool isopen);


        Task<bool> SetPenParm();

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<bool> ChangeTextByName(E3_ID e3_ID, string name, string text);

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<bool> JumpTo(double x, double y, double z, double speed);

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<bool> InitAxis();

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        Task<bool> IsAxisHaveHome(int axis, ref bool bIsHaveHome, ref bool bIsAlreadyFindHome);


        Task<bool> MirrorEnt(E3_ID e3_ID, double cenx, double ceny, bool mirrorx, bool mirrory);


        Task<E3_ID> Copy();

        Task<bool> Delete(E3_ID e3_ID);
    }
}
